#ifndef PCA9557_H
#define PCA9557_H

#ifdef __cplusplus
extern "C" {
#endif

enum {
    PCA_LED1,
    PCA_CH0_S2,
    PCA_CH0_S0,
    PCA_CH1_S0,
    PCA_CH1_S1,
    PCA_CH1_S2,
    PCA_SRAM_CE,
    PCA_CH0_S1,
};

typedef struct _pca9557_client {
    struct _pca9557_client *next;
    void (*setup)(void);
    void (*loop)(void);
} pca9557_client;

#define PCA9557_CLIENT_DEFINE(setup, loop) \
    static void __attribute__((constructor)) _pca9557_add_client_ ## setup ## _ ## loop(void) { \
        static pca9557_client _client;  \
        pca9557_add(&_client, setup, loop); \
    }

void pca9557_gpio_set(int index, int value);
void pca9557_add(pca9557_client *client, void (*setup)(void), void (*loop)(void));

#ifdef __cplusplus
}
#endif

#endif
